
/**
 * @brief    Multiple Design Variable Linking Across PART SE Boundary
 *
 * @version  0.1
 * @author   wuxingchuang
 * @date     2025.04.11
 *          _
 *      ___| |__   ___ _ __   __ _  ___  _ __   __ _
 *     / __| '_ \ / _ \ '_ \ / _` |/ _ \| '_ \ / _` |
 *     \__ \ | | |  __/ | | | (_| | (_) | | | | (_| |
 *     |___/_| |_|\___|_| |_|\__, |\___/|_| |_|\__, |
 *                           |___/             |___/
 * @copyright (c) 2024 by 神工仿真, All Rights Reserved.
 */
#pragma once
#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Real.h"
#include "DataStructure/Input/Design/DesignBase.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN

struct SEDLINKData : public DesignBase {
  struct INDEPData {
    SG::DataStructure::Common::Id m_SEID =
        0;  ///< PART SE identification nr for INDV
    SG::DataStructure::Common::I64 m_INDV =
        0;  ///< Independent design variable id
    SG::DataStructure::Common::Real m_C =
        0.0;  ///< Coefficient corresponding to INDV
  };

  SG::DataStructure::Common::Id m_DSEID =
      0;  ///< PART SE identification nr for DDVIV
  SG::DataStructure::Common::Id m_DDVID = 0;   ///< Dependent design variable id
  SG::DataStructure::Common::Real m_C0 = 0.0;  ///< Constant term
  SG::DataStructure::Common::Real m_CMULT = 0.0;  ///< Constant multiplier
  SG::DataStructure::Common::Id m_domainId = 0;   ///<

  std::vector<INDEPData> m_INDEPList;
};

///@{ @brief operator override
DECLSPEC bool operator==(const SEDLINKData::INDEPData& val1,
                         const SEDLINKData::INDEPData& val2);

DECLSPEC bool operator==(const SEDLINKData& val1, const SEDLINKData& val2);
///}@
SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE
